<template>
  <el-dialog
    :title="mode === 'add' ? '新增部门' : '修改信息'"
    :visible.sync="isShow"
    width="30%"
    @close="closeEvent"
  >
    <el-form
      :model="ruleForm"
      :rules="rules"
      ref="ruleForm"
      label-width="100px"
      class="demo-ruleForm"
    >
      <el-form-item label="部门名称" prop="name">
        <el-input v-model="ruleForm.name"></el-input>
      </el-form-item>
      <el-form-item label="部门编码" prop="code">
        <el-input v-model="ruleForm.code"></el-input>
      </el-form-item>
      <el-form-item label="部门负责人" prop="manager">
        <el-select v-model="ruleForm.manager" @focus="focusEvent">
          <el-option
            :label="item.username"
            :value="item.username"
            v-for="(item, index) in userList"
            :key="index"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="部门介绍" prop="introduce">
        <el-input v-model="ruleForm.introduce"></el-input>
      </el-form-item>
    </el-form>
    <span slot="footer" class="dialog-footer">
      <el-button @click="dialogVisible = false">取 消</el-button>
      <el-button type="primary" @click="submit">确 定</el-button>
    </span>
  </el-dialog>
</template>

<script>
// 导入新增部门 编辑的方法
import { companyDepartment, editDepartment } from '@/api/departments'
// 导入获取负责人列表的方法
import { sysUserSimple } from '@/api/departments'
export default {
  props: ['resData'],
  created () {
    this.$bus.$on('isShowEvent', (val, add) => {
      this.isShow = true
      this.nodeData = val
      this.mode = add
    })
    this.$bus.$on('edit', (value, edit) => {
      this.isShow = true
      this.ruleForm = JSON.parse(JSON.stringify(value))
      this.nodeData = value
      this.mode = edit
      console.log(value)
    })
  },
  data () {
    return {
      // 自定义属性 决定打开时编辑还是新增
      mode: 'add',
      // 负责人列表
      userList: [],
      // 当前行的数据
      nodeData: [],
      // 弹出框是否显示
      isShow: false,
      // form表单数据源
      ruleForm: {
        name: '', // 部门名称
        code: '', // 部门编码
        manager: '', // 负责人名称
        introduce: '' // 介绍
      },
      // form表单验证规则
      rules: {
        name: [
          { required: true, message: '请输入部门名称', trigger: 'blur' },
          {
            validator: (rule, value, callback) => {
              let tempArr = this.resData.filter(item => {
                return item.pid === this.nodeData.id
              })
              // 只要有一个是true就是true
              tempArr.some(item => {
                return item.name === value
              })
                ? callback(new Error('已有此部门存在'))
                : callback()
            },
            trigger: 'blur'
          }
        ], // 部门名称
        code: [
          { required: true, message: '请输入部门编码', trigger: 'blur' },
          {
            validator: (rule, value, callback) => {
              if (this.mode === 'add') {
                this.resData.some(item => {
                  return item.code === value
                })
                  ? callback(new Error('编码重复'))
                  : callback()
              } else {
                this.resData.some(item => {
                  return item.code === value && item.id !== this.nodeData.id
                })
                  ? callback(new Error('编码重复'))
                  : callback()
              }
            },
            trigger: 'blur'
          }
        ], // 部门编码
        manager: [
          { required: true, message: '请输入负责人名称', trigger: 'blur' }
        ], // 负责人名称
        introduce: [{ required: true, message: '请输入介绍', trigger: 'blur' }] // 介绍
      }
    }
  },
  methods: {
    // 弹框关闭
    closeEvent () {
      this.$refs.ruleForm.resetFields()
      this.ruleForm = {
        name: '', // 部门名称
        code: '', // 部门编码
        manager: '', // 负责人名称
        introduce: '' // 介绍
      }
    },
    // 获取负责人列表
    async focusEvent () {
      if (this.userList.length === 0) {
        const res = await sysUserSimple()
        this.userList = res
      }
    },
    // 新增部门
    async submit () {
      if (this.mode === 'add') {
        // 新增
        const res = await companyDepartment({
          ...this.ruleForm,
          pid: this.nodeData.id
        })
        // 提示用户
        this.$message.success('新增成功')
        // 关闭对话框
        this.isShow = false
        // 刷新页面
        this.$emit('getTreeData')
        // console.log(res)
      } else {
        // 编辑
        const res = await editDepartment(this.ruleForm)
        this.$message.success('修改成功')
        // 刷新页面
        this.$emit('getTreeData')
        console.log(res)
      }
    }
  }
}
</script>

<style></style>
